home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
util
/
boot
/
vbrmov23.lha
/
VBRMove.asm
< prev
next >
Wrap
Assembly Source File
|
1994-04-24
|
3KB
|
166 lines
nolist
;:ts=8
*****************************************************************
* *
* VBRMove version 2.3, © 1991 Arthur Hagen, All rights reserved *
* *
* Posted to the Public Domain. *
* *
* Written using the Aztec Manx C 5.0 Assembler *
* *
* All comments deliberately stripped from source. *
* If you don't understand it, you should not mess with it! *
* *
*****************************************************************
include 'exec/memory.i'
include 'exec/execbase.i'
xref _LVOOldOpenLibrary
xref _LVOCloseLibrary
xref _LVOSuperState
xref _LVOCopyMemQuick
xref _LVOOutput
xref _LVOWrite
xref _LVOAllocMem
xref _LVOFreeMem
xref _LVOPermit
INTENA equ $dff09a
list
machine mc68010
public _VBRMove
_VBRMove:
movea.l (4).w,a6
lea INTENA,a3
moveq #64,d6
rol.w #4,d6
lea dosname(pc),a1
jsr _LVOOldOpenLibrary(a6)
movea.l d0,a5
exg.l a5,a6
jsr _LVOOutput(a6)
exg.l a5,a6
move.l d0,d7
moveq #title_end-title,d3
lea title(pc),a0
bsr wrt
btst #AFB_68010,AttnFlags+1(a6)
bne.s tryit
badCPU moveq #wrongpro_end-wrongpro,d3
lea wrongpro(pc),a0
bra.s writerr
tryit jsr _LVOSuperState(a6)
movec VBR,d4
move.l sp,USP
movea.l d0,sp
andi.w #$dfff,SR
tst.l d4
bne.s alrdy
lea MemList+LH_HEAD(a6),a0
moveq #0,d2
moveq #$3f,d3
not.b d3
moveq #0,d5
not.b d5
loopit1 movea.l LN_SUCC(a0),a0
tst.l LN_SUCC(a0)
beq.s memdon1
move.w MH_LOWER(a0),d0
cmp.w d3,d0
bcc.s loopit1
cmp.w d5,d0
bcs.s loopit1
lea MH_FIRST(a0),a4
lea MH_FREE(a0),a2
move.w #$4000,(a3)
addq.b #1,IDNestCnt(a6)
move.l (a4),d2
move.l (a2),d3
moveq #0,d0
move.l d0,(a4)
move.l d0,(a2)
memdon1 move.l d6,d0
addq.l #8,d0
moveq #MEMF_FAST|MEMF_PUBLIC,d1
jsr _LVOAllocMem(a6)
tst.l d2
beq.s memdon2
move.l d2,(a4)
move.l d3,(a2)
subq.b #1,IDNestCnt(a6)
bge.s memdon2
move.w #$c000,(a3)
memdon2 move.l d0,d4
beq.s nofm
andi.w #$fff0,d4
suba.l a0,a0
movea.l d4,a1
bsr.s copy1k
move.l d4,d3
bsr.s setvbr
quit movea.l a5,a1
jmp _LVOCloseLibrary(a6)
nofm moveq #nofastmem_end-nofastmem,d3
lea nofastmem(pc),a0
writerr pea quit(pc)
wrt move.l a0,d2
move.l d7,d1
exg.l a5,a6
jsr _LVOWrite(a6)
exg.l a5,a6
rts
alrdy moveq #already_end-already,d3
lea already(pc),a0
bsr.s wrt
move.l d4,a0
suba.l a1,a1
bsr.s copy1k
moveq #0,d3
bsr.s setvbr
move.l d4,a1
move.l d6,d0
jsr _LVOFreeMem(a6)
bra.s quit
copy1k move.l d6,d0
jmp _LVOCopyMemQuick(a6)
setvbr jsr _LVOSuperState(a6)
movec d3,VBR
move.l sp,USP
movea.l d0,sp
andi.w #$dfff,SR
rts
dc.b '$VER: '
title dc.b 'VBRMove 2.3 (24.4.94)',$0A,$0D
dc.b 'Copyright ',$A9,' 1992 Arthur Hagen.',$0A
title_end
already dc.b 'Clearing VBR.',$0A
already_end
wrongpro
dc.b 'You need 68010 or higher!',$0A
wrongpro_end
nofastmem
dc.b "No fast memory!",$0A
nofastmem_end
dosname dc.b 'dos.library',0
even
END